Compartiendo Datos Entre Behaviours
El entorno de ejecución de scripts también implementa la capacidad de compartir datos y lógica entre diferentes elementos Behaviour utilizando las directivas de preprocesador #import
y #export
.
Estas directivas permiten exponer variables y funciones de un Behaviour para que puedan ser accedidas por otro, lo que facilita la creación de scripts modulares y reutilizables que pueden vincularse fácilmente entre sí.
La Directiva #export
La directiva #export
se usa para exponer variables o funciones desde un Behaviour para que puedan ser accedidas por otros Behaviours. Esto permite compartir datos o lógica entre diferentes partes de tu proyecto, promoviendo la reutilización y la modularidad.
Cuando usas la directiva #export
, es importante entender que el orden de ejecución es crucial.
- Las exportaciones deben definirse antes de ser importadas.
- Si intentas importar una variable o función antes de que haya sido exportada, el código resultará en un error de compilación.
Esto se debe a que los datos exportados (variables, funciones, etc.) no estarán disponibles hasta que el script que los define haya sido procesado y compilado. Por lo tanto, el compilador necesita ver primero las definiciones de exportación para poder enlazarlas correctamente cuando se importen más adelante.
Cómo Usar #export
Cuando defines una variable o función, puedes usar la directiva #export
para hacerla accesible en otros Behaviours. Las funciones o variables exportadas podrán ser utilizadas en otros scripts que las importen. La directiva #export
debe colocarse al final de tu script.
La Directiva #import
La directiva #import
se usa para importar variables, funciones u otros datos exportados desde otros Behaviours dentro de tu script actual. Esto permite que diferentes scripts se vinculen entre sí, compartiendo lógica o estado entre distintos objetos o componentes en la escena.
Es un mecanismo clave para permitir la modularidad y reutilización, ya que permite que Behaviours interactúen entre sí incluso si están en diferentes objetos o niveles de la jerarquía de la escena.
Cómo Usar la Directiva #import
La directiva #import
debe colocarse al inicio de tu script y se usa para especificar las variables o funciones que deseas importar de otros Behaviours. Estos elementos deben haber sido exportados previamente con la directiva #export
.
Exportar e Importar Múltiples Elementos
Puedes exportar e importar múltiples variables o funciones de otros Behaviours en una sola declaración, separándolos por comas. Esto reduce la necesidad de escribir múltiples líneas y mantiene tu código más compacto y legible.
Ejemplo:
// Behaviour 1 - Exporta datos
let playerHealth = 100;
function takeDamage(amount) {
playerHealth -= amount;
}
#pragma export(playerHealth, takeDamage)
//—----------------------------------------------------
// Behaviour 2 - Importa los datos después de que han sido definidos
#pragma import(takeDamage, playerHealth)
function attack() {
takeDamage(20); // Reduce la salud del jugador en 20
}
Compartición de Datos Simplificada y Abstracción de Dependencias
Una de las principales ventajas de usar las directivas #import
y #export
es la simplificación en la compartición de datos entre Behaviours.
Una característica especialmente poderosa de este sistema es que no necesitas saber dónde ni cómo se definen ciertos símbolos (variables, funciones, etc.).
El entorno de ejecución de scripts se encarga de gestionar automáticamente estas conexiones por ti. Esto hace que sea mucho más fácil construir sistemas complejos y dinámicos donde distintos Behaviours pueden interactuar sin preocuparse por sus detalles internos o su ciclo de vida.
Ejemplo:
Imagina que tienes múltiples Behaviours:
- Uno para controlar la salud del jugador
- Uno para un enemigo
- Uno para el gestor del juego
Usando #import
y #export
, el enemigo puede acceder fácilmente a la salud del jugador, incluso si el script del jugador está en un objeto diferente dentro de la escena.
Behaviour del Jugador:
let playerHealth = 100;
function takeDamage(amount) {
playerHealth -= amount;
if (playerHealth <= 0) {
console.log("¡El jugador ha muerto!");
}
}
#pragma export(takeDamage)
Behaviour del Enemigo:
#pragma import(takeDamage)
function attack() {
takeDamage(20); // Reduce la salud del jugador en 20
}
¿Por qué esto es útil?
El Behaviour del Enemigo no necesita saber dónde está definida la acción `
takeDamage
ni si existe en una parte específica de la jerarquía del proyecto. Solo la importa y la usa.El Behaviour del Jugador no necesita rastrear ni gestionar interacciones con el enemigo. Solo exporta la función, permitiendo que otros Behaviours la utilicen.
El Beneficio de la Abstracción
Este sistema te permite enfocarte en la lógica y diseño de comportamiento sin preocuparte por los detalles internos.
Te da la flexibilidad de crear sistemas modulares, donde cada Behaviour tiene una responsabilidad clara y puede interactuar con otros sin dependencias rígidas.